package co.edu.udea.iw.dao.impl;

import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

import co.edu.udea.iw.dao.UsuarioDAO;
import co.edu.udea.iw.dao.cfg.HibernateSessionFactory;
import co.edu.udea.iw.dto.Rol;
import co.edu.udea.iw.dto.Usuario;
import co.edu.udea.iw.exception.IWDaoException;

public class UsuarioDAOHibernate implements UsuarioDAO {

	@Override
	public List<Usuario> obtener() throws IWDaoException {
		
		Session sesion = null;
		List<Usuario> lista = null;
		
		try{
			sesion = HibernateSessionFactory.getInstancia().getSession();
			
			lista = sesion.createCriteria(Usuario.class)
						  .list();
			
			return lista;
			
		}catch (HibernateException e) {
			throw new IWDaoException(e);
		}
		
	}
	
	
	@Override
	public List<Usuario> obtenerPorRol(String rol) throws IWDaoException {
		
		Session sesion = null;
		List<Usuario> lista = null;
		
		try{
			sesion = HibernateSessionFactory.getInstancia().getSession();
			
			//SELECT * FROM USUARIOS WHERE ROL = ?
			
			lista = sesion.createCriteria(Usuario.class)
						  .add(Restrictions.eq("rol.codigo", rol))
						  .list();
			
			return lista;
			
		}catch (HibernateException e) {
			throw new IWDaoException(e);
		}
	}
	
	@Override
	public List<Usuario> obtenerPorRol(Rol rol) throws IWDaoException {
		
		Session sesion = null;
		List<Usuario> lista = null;
		
		try{
			sesion = HibernateSessionFactory.getInstancia().getSession();
			
			//SELECT * FROM USUARIOS WHERE ROL = ?
			
			lista = sesion.createCriteria(Usuario.class)
						  .add(Restrictions.eq("rol", rol))
						  .list();
			
			return lista;
			
		}catch (HibernateException e) {
			throw new IWDaoException(e);
		}
	}

}
